import axios from "axios";
import qs from "qs";
import { key, iv, encrypt, decrypt,getToken } from "./tools.js";

axios.defaults.baseURL = window.config.AppUrl();

// 请求拦截器
axios.interceptors.request.use(
  (config) => {
    if(window.config.encrypt === true){
      config.headers['encrypt'] = true;
        // 判断是否是GET请求
      if (config.method === "get") {
        // 对GET参数进行加密
        if (config.params) {
          let paramStr = qs.stringify(config.params);
          config.params = null;
          let encryptedData = encrypt(paramStr, key, iv);
          config.url = config.url + "?" + encryptedData;
        }
      }

      // 判断是否是POST请求
      if (config.method === "post") {
        // 对请求数据进行加密
        if (config.data) {
          // 如果 Content-Type 未明确设置，尝试根据数据类型判断
          if (Array.isArray(config.data)) {
            config.headers["Content-Type"] = "application/json-patch+json";
          } else if (typeof config.data === "object") {
            config.headers["Content-Type"] = "application/json";
            config.data = JSON.stringify(config.data);
          }
         
          config.data = encrypt(config.data, key, iv);
        }
      }
    }

    // 添加token认证信息
    let token = getToken()
    if(token){
      config.headers['Authorization'] = token;
    }
    return config;
  },
  (error) => {
    return Promise.reject(error);
  }
);

// 响应拦截器
axios.interceptors.response.use(
  (response) => {
    // 判断响应数据是否需要解密
    if(response.headers['encrypt'] === "true"){
      if (response.data) {
        try {
          let decryptedData = decrypt(response.data,key,iv);
          response.data = JSON.parse(decryptedData);
        } catch (error) {
          console.error("解密失败", error);
          return Promise.reject(error);
        }
      }
    }
    
    return response;
  },
  (error) => {
    return Promise.reject(error);
  }
);

export default axios;
